package com.edu.spring.aop.proxy.dynamic;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Proxy;
import java.util.Arrays;

/**
 * 动态代理：JDK动态代理：
 * 强制要求，目标对象必有接口。代理的只是接口对象。
 */
public class DynamicProxy {
    public static Object getProxyInstance(Object target) {
        return Proxy.newProxyInstance(
                target.getClass().getClassLoader(),
                target.getClass().getInterfaces(),
                (proxy, method, args) -> {
                    System.out.println("[日志]--" + method.getName() + "--开始执行...." + Arrays.toString(args));
                    Object result = null;
                    try {
                        result = method.invoke(target, args);
                    } catch (IllegalAccessException | IllegalArgumentException | InvocationTargetException e) {
                        System.out.println("[日志]--" + method.getName() + "--执行异常，信息：" + e.getMessage());
                    } finally {
                        System.out.println("[日志]--" + method.getName() + "--执行结束。");
                    }
                    System.out.println("[日志]--" + method.getName() + "--结束执行.... 结果" + result );
                    return result;
                }
        );
    }
}
